import Vue from 'vue'
import VueRouter from 'vue-router'
/* import { component } from 'vue/types/umd' */
import Index from '../layout/Index.vue'
/* import index from '../views/Error/index.vue' */
import Login from '../views/Login'
import shouye from '../views/shouye/'
import local from '../../src/utils/local.js'
// 引入被抽离的路由
import { asyncRoute } from './asyncRoute'

Vue.use(VueRouter)

// 获取原型对象上的push函数
const originalPush = VueRouter.prototype.push
// 修改原型对象中的push方法
VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}

const routes = [
  {
    path: '/',
    name: 'Index',
    component: Index,
    redirect: '/shouye',
    children: [
      /* 后台首页只留下首页,其他全部抽离 */
      { path: '/shouye', meta: { name: '首页' }, component: shouye }
    ]
  },
  {
    path: '/Login',
    component: Login
  },
  {
    path: '*',
    redirect: '/404'
  },
  {
    path: '/404',
    /* component: () => import('../views/Error') */
    component: () =>
      import(/* webpackChunkName: "error" */ '../views/Error/index.vue')
  }
] /* '../views/About.vue') */
/*  component: () => import(/* webpackChunkName: "about" */

// 根据用户的信息,来判断当前需要展示的路由
// 只有登录和刷新才会计算
// 给自己调用是因为一刷新 要执行

/* function hasper(arr, role) {
  // 如果这个arr数组里面有登录的角色
  if (arr.includes(role)) {
    return true
  } else {
    return false
  }
} */
const router = new VueRouter({
  routes
})
verify()
export function verify() {
  // console.log('成功') 当有role时才能进行下面操作
  const role = local.get('role')
  if (!role) return
  const finRoutes = filterR(asyncRoute.children, role)
  // console.log(finRoutes)
  // 最重要 是将计算出来的路由合并到主路由中
  // 将重新计算 的路由赋值,覆盖之前 的
  asyncRoute.children = finRoutes
  router.addRoutes([asyncRoute])

  // 2 计算动态导航的菜单
  const lastMenu = calcMenu(finRoutes)
  // console.log(lastMenu)
  local.set('menu', JSON.stringify(lastMenu))
}

function calcMenu(arr) {
  return arr.filter(item => {
    if (item.hidden) {
      return false
    } else {
      if (item.children) {
        item.children = calcMenu(item.children)
      }
      return true
    }
  })
}

function filterR(arr, role) {
  // 过滤路由//将过滤后的结果返回给57
  return arr.filter(item => {
    // 如果两者都有就满足if,如果没有就是超级管理员和普通管理员都能进
    if (item.meta && item.meta.role) {
      if (item.children) {
        // 递归操作
        item.children = filterR(item.children, role)
      }
      // 这一行等于76注释 的简写
      return item.meta.role.includes(role)
    } else {
      // return true代表没有标记当前对象全部保留
      return true
    }
  })
}

// 使用导航守卫完成登录验证
router.beforeEach((to, from, next) => {
  const token = local.get('token')
  if (token) {
    /* 如果有token就不拦截,放过去 */
    next()
  } else {
    if (to.path === '/login') {
      /* 如果去登录就不拦截 */
      next()
    } else {
      /* 如果路径不是login就让他去login */
      next('/login')
    }
  }
})

export default router
